package com.moli.iov.alarm.service;

import com.moli.iov.alarm.model.dto.req.AlarmInfoReqDto;
import com.moli.iov.alarm.model.dto.req.AlarmMeAuditReqDto;
import com.moli.iov.alarm.model.dto.res.AlarmInfoResDto;
import com.moli.iov.alarm.model.po.AlarmInfo;
import com.moli.iov.model.dto.req.PageExtend;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *
 * </p>
 *
 * @author zql
 * @since 2019/9/3 13:19
 */
public interface IAlarmService {

  /**
   * 分页查询报警列表
   * @param alarmInfoReqDto
   * @return
   */
  PageExtend<AlarmInfoResDto> listPageAlarmInfo(AlarmInfoReqDto alarmInfoReqDto);

  /**
   * 查询当前获取正在报警列表
   * @param alarmInfoReqDto
   * @return
   */
  List<AlarmInfoResDto> listAlarmInfo(AlarmInfoReqDto alarmInfoReqDto);

  /**
   * 报警详情
   * @param alarmInfoReqDto
   * @return
   */
  AlarmInfoResDto getAlarmInfo(AlarmInfoReqDto alarmInfoReqDto);

  /**
   * 忽略报警
   * @param alarmInfoReqDto
   * @return
   */
  void ignore(AlarmInfoReqDto alarmInfoReqDto);

  /**
   *  正在报警列表 第三方调用
   * @param alarmInfoReqDto
   * @return
   */
  List<AlarmInfo> listAlarmInfoOfThird(AlarmInfoReqDto alarmInfoReqDto);

  /**
   *  根据报警类型获取实时报警数量
   * @return
   */
  Long getAlarmCountByAlarmCodes(List<Integer> alarmCodes, Long companyId);

  /**
   * 里程异变处理 审核
   * @param alarmMeAuditReqDto
   */
  void meAudit(AlarmMeAuditReqDto alarmMeAuditReqDto);

  /**
   * 获取vin 正在报警的数量 校验
   * @param alarmInfoReqDto
   * @return
   */
  Map<String, Integer> getTotalAlarming(AlarmInfoReqDto alarmInfoReqDto);

  /**
   * 解除报警
   * @param alarmInfoReqDto
   * @return
   */
  void relieve(AlarmInfoReqDto alarmInfoReqDto);
  /**
   * 报警详情
   * @param alarmId
   * @return
   */
  AlarmInfoResDto getAlarmInfo(String alarmId);
}
